import sys
# 定义最大可能的或值。根据题目，a_i, b_i < 2^12，即最大值是 2^12 - 1 = 4095。
# 任何由这些数通过按位或运算得到的值也不会超过 4095。
MAX_POSSIBLE_OR_VALUE = (1 << 12) - 1  # 4095
def solve():
    n = int(sys.stdin.readline())
    a = list(map(int, sys.stdin.readline().split()))
    b = list(map(int, sys.stdin.readline().split()))
    # reachable_or_sums 是一个集合，用于存储所有目前已处理的 a 数组前缀
    # 的子序列可以形成的唯一按位或值。
    # 初始时，只有 0 是可达的（通过空子序列）。
    reachable_or_sums = {0}
    # 遍历数组 a 和 b，逐个处理每个前缀
    for i in range(n):
        current_a_val = a[i]
        current_b_val = b[i]
        # 创建一个临时集合，用于存储通过将 current_a_val 与现有可达或值进行按位或操作
        # 所产生的新或值。
        newly_formed_sums = set()
        # 对于 reachable_or_sums 中的每个现有可达或值 s，
        # s | current_a_val 也是一个新的可达或值。
        for s in reachable_or_sums:
            # 由于 s 和 current_a_val 都小于等于 MAX_POSSIBLE_OR_VALUE，
            # 它们的按位或结果也必然小于等于 MAX_POSSIBLE_OR_VALUE。
            newly_formed_sums.add(s | current_a_val)
        # 将所有新形成的或值添加到主集合中。
        # set.update() 方法会高效地添加新元素并自动处理重复。
        reachable_or_sums.update(newly_formed_sums)
        # 检查当前前缀所需的 b_i 是否在可达或值集合中。
        if current_b_val not in reachable_or_sums:
            # 如果 b_i 不可达，则设备无法正常运作，立即输出 "No" 并结束当前测试用例。
            sys.stdout.write("No\n")
            return
    # 如果所有 b_i 都被成功找到，则设备可以正常运作。
    sys.stdout.write("Yes\n")
# 读取测试用例的数量 T
T = int(sys.stdin.readline())
# 循环处理每个测试用例
for _ in range(T):
    solve()
"""
输入：
2
3
1 2 3
1 3 3
2
1 2
2 1
输出：Yes
No
"""